<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>

        // let arr=[1,2,3]

        // arr.filter((item,index)=>{

        // })

        // arr.fn(1)(2)(3)--->arr.fn(1,2,3)--->arr.fn(1)(2)(3)  
        //  如果是n ?  arr.fn(1)(2)(3)(n-1)(n)


        // 1. 函数内部可以使用全局变量。

        //    let a=100;
        // let  fn=()=>{
        //     let b='我是函数内部的变量'
        //     console.log(a)
        //     var c=200; //函数内用var 声明的变量是局部变量
        //      d=10000    // 全局变量

        // }

        // fn()


        // console.log(b)

        //         2. 函数外部不可以使用局部变量。
        // 3. 当函数执行完毕，本作用域内的局部变量会销毁







        // 闭包（closure）指有权访问另一个函数作用域中变量的函数。
        // 简单理解就是 ，一个作用域可以访问另外一个函数内
        // 部的局部变量  

        //  保存函数里面的某一种状态   
        // 当函数执行完后  别的函数依然可以访问到当前函数里面的这种状态

        //  闭包优点  延展了函数作用域的范围

        // function fn1() {
        //     var a = 'fn1 局部变量'
        //     // console.log(b)



        //   function  fn2() {
        //         console.log(a)
        //         var b = 'fn2 变量'
        //         console.log(b)
        //         console.log(a+b)
        //         let res2=a+b
        //         return res2;



        //     }
        // return  a;
        // return a+'处理一点东西'
        // return a+'fn(处理一点东西)'
        // return a +fn()


        //          let  res=  fn2()

        //            return res
        //     }


        //    let res= fn1()
        //    console.log(res)


















        //  作用：延伸变量的作用范围 
        //  如果是闭包 那么 fn函数里面的变量 不会立马销毁  所以 导致 fun 可以访问得到
        //  闭包的缺点  内存泄漏  

        function fn() {
            var num = 10;  
            function fun() {
                alert(1)
                console.log(this)
                console.log(num);
            }
            return fun;
        }
        var f = fn();
        f()

        // console.log(num)




    </script>
</body>

</html>